thinkphp
一、准备工作,使用phpinfo()查看有没有zip扩展
<?php echo phpinfo(); ?>
如果没有安装扩展的,请参照以下方法:
1、下载对应版本的扩展包:https://windows.php.net/downloads/pecl/releases/zip/1.13.5/,比如我是php5.6(window7_64位系统),则下载如下:
2、把解压的php_zip.dll文件放到php-5.6.27-nts/ext目录
3、在php.ini添加以下配置:
extension=php_zip.dll
4、重启Apache
二、thinkphp后端控制器代码:
/** ** @name='压缩' */ public function zip() { if(request()->isPost()) { try { //文件夹目录 $dirPath=ROOT_PATH.'/demo/'; //zip压缩包保存路径 $zipPath= ROOT_PATH."/public/update/demo.zip"; //创建zip实例 $zip=new \ZipArchive(); if($zip->open($zipPath, \ZipArchive::CREATE|\ZipArchive::OVERWRITE)=== TRUE) { //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法 addFileToZip($zip,$dirPath,$dirPath); //关闭处理的zip文件 $zip->close(); } } catch (\Exception $e) { $this->error('压缩失败,Error:'.$e); } $this->success('压缩成功'); } } /** * 添加文件夹里的文件到zip * @param zip ZipArchive对象 * @param path 源文件夹路径 * @param root 源文件夹根目录 * 补充说明:第三个参数建议和第二个参数一样,因为递归会修改第二个参数的值,因此必须传第三个参数 */ function addFileToZip($zip,$path,$root){ $handler=opendir($path); //打开当前文件夹 while(($filename=readdir($handler))!==false){ if($filename != "." && $filename != ".."){//不操作名字为'.'和'..'的文件夹或文件 if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归 addFileToZip($zip,$path."/".$filename,$root); }else{ //将文件加入zip对象,第二个参数是zip里文件的路径 $pathFilename=$path . "/" . $filename; $zip->addFile($pathFilename, str_replace($root.'/','',$pathFilename)); } } } @closedir($path); }
文章由鸿邑科技成都网站建设编辑整理,转载请注明出处!
0
分享至: